importosfromament_index_python.packagesimportget_package_share_directoryfromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.actionsimportIncludeLaunchDescription,SetEnvironmentVariablefromlaunch.conditionsimportIfConditionfromlaunch.launch_description_sourcesimportPythonLaunchDescriptionSourcefromlaunch.substitutionsimportLaunchConfigurationfromlaunch_ros.actionsimportNodePACKAGE_NAME="ign_tutorial"SDF_MODEL_NAME="vehicle_2"WORLD_NAME="vehicle.sdf"defgenerate_launch_description():sim_time_arg=DeclareLaunchArgument("use_sim_time",default_value=["true"],description="Enable sim time from /clock",)with_bridge_arg=DeclareLaunchArgument("with_bridge",default_value=["false"],description="Launch simulation with ros ign bridge",)pkg_ros_gz_sim=get_package_share_directory("ros_gz_sim")pkg=get_package_share_directory(PACKAGE_NAME)sdf_path=f"{pkg}/models/{SDF_MODEL_NAME}/model.sdf"use_sim_time=LaunchConfiguration("use_sim_time")resources=[os.path.join(pkg,"worlds"),os.path.join(pkg,"models")]resource_env=SetEnvironmentVariable(name="IGN_GAZEBO_RESOURCE_PATH",value=":".join(resources))gazebo=IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(pkg_ros_gz_sim,"launch","gz_sim.launch.py")),launch_arguments={"gz_args":f"-r -v 2 {WORLD_NAME}"}.items(),)# launch ign_bridge if with_bridge is trueign_bridge=IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(pkg,"launch","ign_bridge.launch.py"),),launch_arguments={"use_sim_time":use_sim_time}.items(),condition=IfCondition(LaunchConfiguration("with_bridge")))# robot state publisher noderobot_state_publisher=Node(package="robot_state_publisher",executable="robot_state_publisher",output="screen",parameters=[{"use_sim_time":use_sim_time},{"robot_description":open(sdf_path).read()},],)ld=LaunchDescription()ld.add_action(sim_time_arg)ld.add_action(with_bridge_arg)ld.add_action(resource_env)ld.add_action(gazebo)ld.add_action(ign_bridge)ld.add_action(robot_state_publisher)returnld
fromlaunchimportLaunchDescriptionfromlaunch.actionsimportDeclareLaunchArgumentfromlaunch.conditionsimportIfConditionfromlaunch.substitutionsimportLaunchConfigurationfromlaunch_ros.actionsimportNodeROBOT_NAME="basic_mobile_bot"defgenerate_launch_description():use_sim_time_arg=DeclareLaunchArgument("use_sim_time",default_value=["false"],description="use sim time from /clock")namespace=""use_sim_time=LaunchConfiguration("use_sim_time")ign_model_prefix="/world/demo/model/"+ROBOT_NAME# clock bridgeclock_bridge=Node(package="ros_gz_bridge",executable="parameter_bridge",namespace=namespace,name="clock_bridge",output="screen",arguments=["/clock@rosgraph_msgs/msg/Clock[ignition.msgs.Clock"],condition=IfCondition(use_sim_time),)# joint state bridge# /world/demo/model/v2/model/basic_mobile_bot/joint_statejoint_state_bridge=Node(package="ros_gz_bridge",executable="parameter_bridge",namespace=namespace,name="joint_state_bridge",output="screen",parameters=[{"use_sim_time":use_sim_time}],arguments=[ign_model_prefix+"/joint_state"+"@sensor_msgs/msg/JointState"+"[ignition.msgs.Model"],remappings=[(ign_model_prefix+"/joint_state","/joint_states")],)ld=LaunchDescription()ld.add_action(use_sim_time_arg)ld.add_action(clock_bridge)ld.add_action(joint_state_bridge)returnld